# encoding:utf-8
'''
@author : xaing
@time : 2019/4/10 14:16
@地址 : 广州
@作用 :
@结果 :
'''



import sys
from PyQt5.QtWidgets import QApplication,QToolTip,QPushButton,QMessageBox,QTextEdit,QAction,qApp,QMainWindow
from PyQt5.QtGui import QFont,QIcon
from PyQt5.QtCore import QCoreApplication

'''QApplication 应用对象   QWidgets 申请基本窗体空间  QToolTip 创建窗体组件提示窗 QPushButton 按钮 QIcon图片 QAction 事件，'''


class Frame(QMainWindow):
    def __init__(self):
        super().__init__()
        self.initUI()


    def initUI(self):
        QToolTip.setFont(QFont("SansSerif",11))#设置提示框的字体
        self.setToolTip('这是窗体')

        #创建一个文本框
        text = QTextEdit()
        self.setCentralWidget(text)

        #QAction是一个抽象类，可以通过菜单栏，工具栏，或者快捷键实现，
        #以下代码实现了带有图标和Exit的菜单的创建，同时设置了执行命令的快捷键以及鼠标悬停在这个菜单上的提示信息
        exitAct = QAction(QIcon('exit.ico'),'Exit',self)
        exitAct.setShortcut('Ctrl+Q')
        exitAct.setStatusTip('Press and quit')

        #执行此动作时，发射一个triggered信号，这个信号和quit连接，执行相关事件
        exitAct.triggered.connect(qApp.quit)

        #创建菜单栏，附加一个名为File的菜单，然后把之前创建的exitAct添加到file这个菜单中
        menubar = self.menuBar()
        fileMenu = menubar.addMenu('&File')
        fileMenu.addAction(exitAct)

        #添加工具栏，状态栏 并为工具栏中的组件添加事件
        self.statusBar()
        tbar = self.addToolBar('Exit')
        tbar.addAction(exitAct)


        #创建两个按钮对象

        qbtn = QPushButton("退出",self)

        qbtn.setToolTip('退出程序')#设置鼠标悬停出现的提示信息

        qbtn.resize(qbtn.sizeHint())#设置按钮大小为默认的

        qbtn.move(220,360)#设置按钮出现的位置

        qbtn.clicked.connect(QCoreApplication.instance().quit)#为按钮添加事件机制

        self.setGeometry(200,300,300,400)#设置窗口出现的位置以及窗口的宽和高
        self.setWindowTitle("小坤窗口")
        self.show()


    #该方法主要是关闭窗口时弹出对话框，让用户确认是否关闭
    def closeEvent(self, event):
        #其中参数分别为 对话框标题 对话框消息 对话框选项（两个选项），默认选项
        reply = QMessageBox.question(self,u'退出页面',u'你确定要退出页面么？',QMessageBox.Yes | QMessageBox.No,QMessageBox.No)
        if reply == QMessageBox.No:
            event.ignore()
        else:
            event.accept()


if __name__ == "__main__":
    app = QApplication(sys.argv)# 创建一个应用对象 ,sys.argv 是提供对脚本控制功能的参数
    #实例化对象
    ex = Frame()

    #结束应用的主循环，主循环是从窗口系统中接受时间并快速的法网应用窗口，调用exit()方法或者主窗口关闭时，主循环结束
    # sys.exec_() #方法是确保关闭干净
    sys.exit(app.exec_())